package com.lagou.edu.utils;

import com.alibaba.druid.pool.DruidPooledConnection;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * @className: ConnectionUtils
 * @Description: TODO
 * @author: Huangjianyun
 * @date: 2022/3/21 22:18
 */
public class ConnectionUtils {

    //定义一个ThreadLocal线程 存储线程的 数据库连接对象
    private ThreadLocal<Connection> threadLocal = new ThreadLocal<>();

//    private ConnectionUtils(){
//
//    }
//    private static  ConnectionUtils connectionUtils= new ConnectionUtils();
//
//
//    //对外提供该连接工具类实例的方法
//    public static ConnectionUtils getInstance(){
//        return connectionUtils;
//    }
    //从当前线程获取连接
    public Connection getCurrentThreadConn() throws SQLException {
        /*
        * 判断当前线程中是否已经绑定， 如果没有进行绑定， 需要从连接池获取一个连接绑定当前线程
        *
        * */
        Connection connection = threadLocal.get(); //从当前线程拿到连接
        //进行判断，从当前线程是否获取连接，
        if(connection == null){
            //如果当前线程没有获取到连接 从druid连接池获取连接
            connection = DruidUtils.getInstance().getConnection();
            //获取连接设置到线程ThreadLoacl中
            threadLocal.set(connection);
        }
        //不管从druid连接获取连接设置线程中， 直接从线程中获取连接直接返回连接对象
        return  connection;
    }
}
